package com.lantosec.hmrp.modules.system.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.modules.system.entity.SysDeptUser;
import com.lantosec.hmrp.modules.system.entity.SysUser;
import com.lantosec.hmrp.modules.system.vo.SysRoleVO;
import com.lantosec.hmrp.modules.system.vo.SysUserVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author AutoCode
 * @since 2020-02-07
 */
//@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
public interface SysUserMapper extends BaseMapper<SysUser> {
    
    Integer resetPassword(@Param("userId") String userId);

    List<SysUser> queryUserList(PageVO<SysUser> page, @Param("name") String name,@Param("username")String username,
                                @Param("deptId") String deptId, @Param("state") String state);

    List<SysRoleVO> queryAllRole();

    List<SysRoleVO> queryRoleByUserId(@Param("userId") String userId);

    void saveUserRoleInfo(@Param("userId") String userId, @Param("roleId") String it);

    void deleteUserRole(@Param("userId") String userId);

    /**
     * 部门人员查询
     * @param page
     * @param deptId
     * @return
     */
    public List<SysUserVO> queryDeptUserList(PageVO<SysUserVO> page, @Param("deptId") String deptId, @Param("positionId") String positionId, @Param("name") String name);

    void saveUserDeptInfo(@Param("user") SysDeptUser user);

    void deleteUserDeptInfo(@Param("userId") String userId);

    List<SysUser> queryUserByDeptId(@Param("deptId") String deptId);

    /**
     * 根据部门和岗位查询用户
     * @param deptId        部门Id
     * @param positionId    岗位Id
     * @return
     */
    List<SysUser> queryUser(@Param("deptId") String deptId, @Param("positionId") String positionId);


    List<String> getDeptIdByUserId(@Param("userId") String userId);

    /**
     * 根据当前用户Id查询上级管理岗的用户Id列表
     * @param userId    用户Id
     * @return          上级管理岗的用户Id列表
     */
    List<String> queryParentUserIdByUserId(@Param("userId") String userId);

    /**
     * 根据部门ID列表查询部门管理岗的用户Id列表
     * @param deptIds   部门ID列表
     * @return          部门管理岗的用户Id列表
     */
    List<String> queryManagerUserIdByDeptIds(@Param("deptIds") List<String> deptIds);

    /**
     * 根据部门ID查询部门管理者的用户Id列表
     * @param deptIds   部门ID列表
     * @return          部门管理者的用户Id列表
     */
    List<String> queryChargeUserIdByDeptIds(@Param("deptIds") List<String> deptIds);

    /**
     * 根据角色ID查询用户Id列表
     * @param roleIds   角色ID列表
     * @return          部门管理者的用户Id列表
     */
    List<String> queryUserIdByRoleIds(@Param("roleIds") List<String> roleIds);

    SysDeptUser getDeptInfo(String userId);

    String getPermissionList(String roleId);

    List<SysDeptUser> getDeptAndPositionList(String userId);

    /**
     * 通过ID和密码查询用户信息
     * @param userId
     * @param oldPassword
     * @return
     */
    SysUser getUserPassword(@Param("userId") String userId, @Param("oldPassword") String oldPassword);

    /**
     * 修改用户密码
     * @param userId
     * @param newPassword
     */
    void updateUserPassword(@Param("userId") String userId, @Param("newPassword") String newPassword);
}
